/*
 * gpio1500a.h
 *
 *  Created on: 2019年3月28日
 *      Author: westl
 */

#ifndef GPIO1500A_H_
#define GPIO1500A_H_

#include <unistd.h>

#define VOLUME_DOWN (0x02)
#define VOLUME_UP (0x01)
#define PANEL_SWITCH (0x04)
#define LIGHT_UP (0x08)
#define LIGHT_DOWN (0x10)
#define POWEROFF_KEY (0x80)

#define CRU_REG_PAD_SEL (0x28100C00)
#define GPIO_BASE (0x28006000)
#define GPIO_PORTA (0x0)
#define GPIO_PORTB (0xC)
#define GPIO_PORTC (0x18)
#define GPIO_PORTD (0x24)
#define GPIO_DATA_REG (0x0)
#define GPIO_DATA_DIRECTION_REG (0x4)
#define GPIO_EXT_PORT_A (0x50)
#define GPIO_EXT_PORT_B (0x54)

#define CS_0 gpio_write(0, 0)   //拉低 SPI_CS
#define CS_1 gpio_write(1, 0)   //拉高 SPI_CS
#define SCLK_0 gpio_write(0, 1) //拉低 SPI_SCK
#define SCLK_1 gpio_write(1, 1) //拉高 SPI_SCK
#define SO_0 gpio_write(0, 2)   //拉低 SPI_MOSI
#define SO_1 gpio_write(1, 2)   //拉高 SPI_MOSI
#define in_SI (gpio_bool_read(0x80))
#define Delay_Us(N) delay_us(N)

class Gpio_1500a
{
private:
	off_t pageSize;
	unsigned char *map_base;
	unsigned int raw_reg_lens;
	int delay_us(int us_n);

public:
	Gpio_1500a();
	int gpio_init();
	int getInput();
	void gpio_write(int wreg, int bits);
	unsigned int Read_status(unsigned char command, unsigned char command_data);
	bool gpio_bool_read(int mask);
	virtual ~Gpio_1500a();
};

#endif /* GPIO1500A_H_ */
